#include <iostream>
#include <algorithm> // for max
using namespace std;

int main() {
    string s1, s2;
    cin >> s1 >> s2;
    // 初始化数组（210位足够大整数计算）
    int a1[210] = {0}, a2[210] = {0}, a3[210] = {0};
    // 逆序存储第一个数字（个位在索引0）
    for (int i = 0; i < s1.size(); i++) {
        a1[i] = s1[s1.size() - 1 - i] - '0';  // 修正索引
    }

    // 逆序存储第二个数字
    for (int i = 0; i < s2.size(); i++) {  // 补充分号
        a2[i] = s2[s2.size() - 1 - i] - '0';  // 修正数组名和索引
    }

    // 计算最大长度
    int len = max(s1.size(), s2.size());

    // 逐位相加 + 进位处理
    for (int i = 0; i < len; i++) {
        a3[i] += a1[i] + a2[i];  // 包含进位值
        if (a3[i] >= 10) {
            a3[i + 1] += 1;       // 进位
            a3[i] %= 10;           // 保留个位
        }
    }

    // 处理最高位进位
    if (a3[len] != 0) len++;  // 修正数组名

    // 跳过前导零（最高位开始查找第一个非零值）
    int start = len - 1;
    while (start > 0 && a3[start] == 0) {
        start--;
    }

    // 输出最终结果（从高位到低位）
    for (int i = start; i >= 0; i--) {
        cout << a3[i];
    }
    cout << endl;  // 输出换行
    return 0;
}